    /**
     * jQuery.fn.sortElements
     * --------------
     * @param Function comparator:
     *   Exactly the same behaviour as [1,2,3].sort(comparator)
     *   
     * @param Function getSortable
     *   A function that should return the element that is
     *   to be sorted. The comparator will run on the
     *   current collection, but you may want the actual
     *   resulting sort to occur on a parent or another
     *   associated element.
     *   
     *   E.g. $('td').sortElements(comparator, function(){
     *      return this.parentNode; 
     *   })
     *   
     *   The <td>'s parent (<tr>) will be sorted instead
     *   of the <td> itself.
     */
    jQuery.fn.sortElements = (function(){
     
        var sort = [].sort;
     
        return function(comparator, getSortable) {
     
            getSortable = getSortable || function(){return this;};
     
            var placements = this.map(function(){
     
                var sortElement = getSortable.call(this),
                    parentNode = sortElement.parentNode,
     
                    // Since the element itself will change position, we have
                    // to have some way of storing its original position in
                    // the DOM. The easiest way is to have a 'flag' node:
                    nextSibling = parentNode.insertBefore(
                        document.createTextNode(''),
                        sortElement.nextSibling
                    );
     
                return function() {
     
                    if (parentNode === this) {
                        throw new Error(
                            "You can't sort elements if any one is a descendant of another."
                        );
                    }
     
                    // Insert before flag:
                    parentNode.insertBefore(this, nextSibling);
                    // Remove flag:
                    parentNode.removeChild(nextSibling);
     
                };
     
            });
     
            return sort.call(this, comparator).each(function(i){
                placements[i].call(getSortable.call(this));
            });
     
        };
     
    })();
    
    $(document).ready(function() {
        $("li.item a").click(function(){
            site_key = $(this).parents('li.item').attr('site_key');
            $.ajax({
               type: "GET",
               url: "/tuan/api/update_pop/" + site_key,
               success: function(msg){
               
               }
            });
        });
		
		group_index = group_index || 0;
		group_links = group_links || new Array();
		$("div.sold-total > span").each(function(){
			group_link = new Object();
			group_link.link = $(this).parents('li.item').attr('link');
			group_link.id = $(this);
			group_links.push(group_link);
		});

		//setInterval('update_group_sold_total()', 30000); // 30秒钟更新一个团购的购买人数
    });

	var group_index = 0;
	var group_links = new Array();

	function update_group_sold_total() {
		group_index = group_index || 0;
		if (group_index + 1 == group_links.length)
			group_index = 0;
		else 
			group_index += 1;
		
		group_link = group_links[group_index]

		$.ajax({
			type:"POST",
			url:"/tuan/api/update_group",
			data:"link=" + group_link.link,
			success:function(msg){
				group_link.id.html(i);
			}
		});
	}
    
    function sortByDiscount() {
        $("li.item").sortElements(function(a, b){
            return $(a).attr('discount') - $(b).attr('discount');
        });
    }
    
    function sortByPopular() {
        $("li.item").sortElements(function(a, b){
            return $(b).attr('site_pop') - $(a).attr('site_pop');
        });
    }
    
    function sortBySold() {
        $("li.item").sortElements(function(a, b){
            return $(b).attr('sold_total') - $(a).attr('sold_total');
        });
    }
    
    function sortByPrice() {
        $("li.item").sortElements(function(a, b){
            return $(a).attr('price') - $(b).attr('price');
        });
    }
    
    function change_order(code){
        code = Number(code);
        switch(code) {
            case 0: // 流行
                sortByPopular();
                break;
            case 1: // 售出
                sortBySold();
                break;
            case 2: // 折扣
                sortByDiscount();
                break;
            case 3: // 价格
                sortByPrice();
                break;
        }
    }